// 给你一个长度为n的整数数组nums，其中nums的所有整数都在范围[1, n]内，且每个整数出现一次或者两次，请你找出所有出现两次的整数，并以数组的形式返回
// 要求，设计并实现一个时间复杂度为O(n)且仅使用常量额外空间的算法解决此问题

// 思路，哈希表
// 以数组作为哈希表，数组中的元素都在[1, n]的范围里，n为数组长度，改变Math.abs(nums[i]) - 1位置的值使用正负号作为标记
// 当前元素对应位置的值小于0，说明重复了，放入结果中

function findDuplicates(nums) {
    let n = nums.length
    let ans = []
    for (let i = 0; i < n; i++) {
        let val = Math.abs(nums[i])
        if (nums[val - 1] > 0) {
            nums[val - 1] = -nums[val - 1]
        } else {
            ans.push(val)
        }
    }
    return ans
}

let nums = [4,3,2,7,8,2,3,1]
console.log(findDuplicates(nums))